import os
import tempfile
import pytest

from miniURL import create_app
from miniURL.db import init_db, get_db

with open(os.path.join(os.path.dirname(__file__), 'data.sql')) as f:
    _data_sql = f.read()

@pytest.fixture
def app():
    db_fd, db_path = tempfile.mkstemp()

    app = create_app(test_config={
        'TESTING': True,
        'DATABASE': db_path
    })

    with app.app_context():
        init_db()
        get_db().executescript(_data_sql)
    
    yield app

    os.close(db_fd)
    os.unlink(db_path)

@pytest.fixture
def client(app):
    return app.test_client()

@pytest.fixture
def runner(app):
    return app.test_cli_runner()

class AuthActions(object):
    def __init__(self, client):
        self._client = client
    
    def login(self, username = 'test', password = 'test'):
        return self._client.post('/auth/login',
            data = {'username': username, 'password': password})
    
    def logout(self):
        return self._client.get('/auth/logout')

@pytest.fixture
def auth(client):
    return AuthActions(client)

